package struts.action;

import java.io.IOException;
import java.util.Map;

import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import struts.form.ActionForm;
import struts.form.FullForm;
import struts.form.XmlBean;

public class ActionServlet extends HttpServlet {

	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;

	
	/**
	 * The doGet method of the servlet. <br>
	 *
	 * This method is called when a form has its tag value method equals to get.
	 * 
	 * @param request the request send by the client to the server
	 * @param response the response send by the server to the client
	 * @throws ServletException if an error occurred
	 * @throws IOException if an error occurred
	 */
	public void doGet(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
			
			response.setContentType("text/html;charset=UTF-8;pageEncoding=UTF-8");
			request.setCharacterEncoding("UTF-8");

		   //获得请求头
			//String path = this.getPath(request.getServletPath());
			String path = request.getServletPath().split("\\.")[0];
			Map<String,XmlBean> map = (Map<String,XmlBean>)this.getServletContext().getAttribute("struts");
			XmlBean xml = map.get(path);
			String formclass = xml.getFormClass();
			ActionForm form = FullForm.full(formclass,request);
			String actionclass = xml.getActionClass();
			Action action = null;
			String url = "";
			try{
				Class clazz = Class.forName(actionclass);
				action = (Action)clazz.newInstance();
				url = action.execute(request, form,xml.getActionForward());
				
			}catch(Exception e){
				e.printStackTrace();
				System.out.println("严重：控制器异常！");
			}
			RequestDispatcher dis = request.getRequestDispatcher(url);
			dis.forward(request, response);
	}

	/**
	 * The doPost method of the servlet. <br>
	 *
	 * This method is called when a form has its tag value method equals to post.
	 * 
	 * @param request the request send by the client to the server
	 * @param response the response send by the server to the client
	 * @throws ServletException if an error occurred
	 * @throws IOException if an error occurred
	 */
	public void doPost(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		this.doGet(request, response);
	
	}
	private String getPath(String servletpath){
		return servletpath.split("\\.")[0];
	}
	
}
